#ifndef SRC_LTLEXER_H_
#define SRC_LTLEXER_H_

#include "src/ltbase.h"
#include "src/lterr.h"

typedef enum {
    ltlexer_kEof,
    ltlexer_kSymbol,
    ltlexer_kStringLiteral,
    ltlexer_kOperator,
} ltlexer_TokenType;

typedef struct {
    ltlexer_TokenType type;
    lt_USize pos;
    lt_USize len;
} ltlexer_Token;

typedef struct {
    char const* content;
    lt_USize pos;
} ltlexer_Lexer;

/** 解析下一个Token，消耗当前Token。

解析结束会得到kEof类型的Token，而不是返回错误。*/
lterr_Code ltlexer_Next(ltlexer_Lexer* lexer, ltlexer_Token* token);

/** 获取下一个Token，不消耗当前Token。

解析结束会得到kEof类型的Token，而不是返回错误。*/
lterr_Code ltlexer_Peek(ltlexer_Lexer* lexer, ltlexer_Token* token);

#endif // SRC_LTLEXER_H_
